Computer data storage is traditionally divided into a hierarchy between at least memory and storage. Memory stores data and is directly accessible to the CPU. Data may include cache lines, pages, ranges, objects, or any other format that allows information to be transferred to memory. Under the traditional hierarchy, memory contains additional subdivisions for processor registers, processor cache, and main memory. In contrast, storage stores data but is not directly accessible to the CPU and instead transfers data to and from memory in order for that data to be accessible to the CPU.
Technologies in memory and storage vary in volatility, capacity, cost, energy use, and performance. Typically, the closer to the CPU a technology is in the traditional hierarchy, the faster it is designed to perform. These faster memory technologies, however, are typically more expensive and lower capacity than other memory and storage technologies. To balance this, lower tiers of the traditional hierarchy use memory and storage technologies that, while slower, are less expensive and have higher data capacity. Furthermore, while some computing environments can enable some migration capability from one technology to another, these solutions do not work at the hardware and firmware level and instead are implemented using application software.